import { defineStore } from 'pinia'
import utils from '@/utils/calc'

export const useCalcStore = defineStore('calc', {
  persist: {
    key: 'calc',
    pick: ['raceColor']
  },
  state: () => ({
    footBalls: [], // 足球数据
    basketBalls: [], // 篮球数据
    orderData: {}, // 订单数据
    basketballData: {}, // 篮球订单数据
    raceColor: {}, // 竞猜计算器 订单
    raceColorTime: '', // 截止时间
    times: 1, // 默认倍数
    betPrice: 2, // 价格
    betAmount: '', // 金额
    gMID: '', // 比赛id
    isInShares: false, // 记录当前奖金优化功能是否处于分享状态
  }),
  actions: {
    // 排序算法
    sortByWtime(obj) {
      return Object.entries(obj).sort((a, b) => Number(a[0]) - Number(b[0])).map(ary => ary[1])
    },
    // 获取比赛数据 奖金计算器
    setMatchDataCalcBonus(matches) {
      // 比赛数据处理
      const lst = []
      const _allmatches = [matches[1], matches[2]] // 1足球列表 2篮球列表
      for (let index = 0; index < _allmatches.length; index++) {
        const _matches = _allmatches[index]
        lst.push({})
        for (let i = 0; i < _matches.length; i++) {
          const item = _matches[i]
          // 开赛时间-年月日 格式转换
          item.matchData = utils.dateFormat(item.stime * 1000, 'YYYY-MM-DD')
          // 开赛时间-时分 格式转换
          item.jtime = utils.dateFormat(item.stime * 1000, 'hh:mm')
          // 开售时间[即周号的日期时间] 格式转换
          item.showData = utils.dateFormat(item.wtime * 1000, 'YYYY-MM-DD')
          // 足球数据处理
          if (index === 0) {
            // 增加判断 任何一种玩法的 cbt 有一个是 2 的时候 return true
            item.cbtbool = [item.cbt, item.crs_cbt, item.hafu_cbt, item.hhad_cbt, item.ttg_cbt].some(el => el === 2)
            // 增加赔率变化预处理
            const _keys = ['had', 'hhad', 'crs', 'hafu', 'ttg']
            for (let i = 0; i < _keys.length; i++) {
              const _key = _keys[i]
              const changekey = _key === 'had' ? 'change' : `${_key}_change`
              item[`${_key}Changes`] = null
              if (!Array.isArray(item[changekey])) {
                item[`${_key}Changes`] = {}
                for (const key in item[changekey]) {
                  const element = item[changekey][key];
                  // 重置写入的key值，如hhad_win、crs_win等
                  let rskey = key
                  if (_key === 'hhad' || _key === 'crs') {
                    if (key === 'win' || key === 'same' || key === 'lose') {
                      rskey = `${_key}_${key}`
                    }
                  }
                  // [0]为css类名 [1]为具体展示的内容
                  let rs = ['same', '']
                  if (element > 0) {
                    rs[0] = 'up'
                    rs[1] = '↑'
                  } else if (element < 0) {
                    rs[0] = 'down'
                    rs[1] = '↓'
                  }
                  item[`${_key}Changes`][rskey] = rs
                }
              }
            }
          }
          // 篮球数据处理
          if (index === 1) {
            // 让球 格式转换
            item.hdc_rq = Number(item.hdc_rq) > 0 ? `+${item.hdc_rq}` : item.hdc_rq
            item.toalsp = Number(item.toalsp)
            // 增加赔率变化预处理
            const _keys = ['mnl', 'hdc', 'hilo', 'wnm']
            for (let i = 0; i < _keys.length; i++) {
              const _key = _keys[i]
              const changekey = _key === 'mnl' ? 'change' : `${_key}_change`
              item[`${_key}Changes`] = null
              if (!Array.isArray(item[changekey])) {
                item[`${_key}Changes`] = {}
                for (const key in item[changekey]) {
                  const element = item[changekey][key];
                  // [0]为css类名 [1]为具体展示的内容
                  let rs = ['same', '']
                  if (element > 0) {
                    rs[0] = 'up'
                    rs[1] = '↑'
                  } else if (element < 0) {
                    rs[0] = 'down'
                    rs[1] = '↓'
                  }
                  item[`${_key}Changes`][key] = rs
                }
              }
            }
          }
          // 按照开售时间，将数据重新分组
          if (!lst[index][item.wtime]) {
            lst[index][item.wtime] = []
          }
          lst[index][item.wtime].push(item)
        }
      }
      this.footBalls = this.sortByWtime(lst[0])
      this.basketBalls = this.sortByWtime(lst[1])
    },
    // 修改odds
    changeOdds(odds) {
      this.times = odds
    },
    // 保存订单数据
    saveData(data){
      this.orderData = data;
      if (Object.keys(this.orderData).length) {
        // 选择的数据按照jtime升序排列
        const _ary = Object.entries(data).sort((a, b) => a[1][0].jtime - b[1][0].jtime)
        // 开赛前 20 分钟 截止投注  - 1200 s
        this.raceColorTime = utils.dateFormat((_ary[0][1][0].jtime - 1200) * 1000, 'YYYY-MM-DD hh:mm:ss')
        // 按照玩法进行分类 结果had:[],crs:[],hafu:[]...
        this.raceColor = {}
        _ary.forEach(([key, ary]) => {
          if (ary.length) {
            // 根据 比赛id 分类
            this.raceColor[key] = {}
            for (let i = 0; i < ary.length; i++) {
              const item = ary[i]
              // 按照 玩法类型 分类
              if (!this.raceColor[key][item.type]) {
                this.raceColor[key][item.type] = []
                // 记录比赛基础信息
                for (const key1 in item) {
                  if (key1 !== 'type' || key1 !== 'play' || key1 !== 'result' || key1 !== 'odds') {
                    this.raceColor[key][key1] = item[key1]
                    this.raceColor[key].id = utils.dateFormat(item.jtime * 1000, 'YYYY-MM-DD').replace(/-/g, '') + item.weekno
                    if (item.mid) {
                      this.raceColor[key].mid = item.mid
                    }
                    if (item.rq) {
                      this.raceColor[key].rq = item.rq
                    }
                  }
                }
              }
              // 玩法数组中，记录选择项
              const __obj = {}
              for (const key1 in item) {
                if (key1 === 'type' || key1 === 'play' || key1 === 'result' || key1 === 'odds') {
                  __obj[key1] = item[key1]
                }
              }
              this.raceColor[key][item.type].push(__obj)
            }
          }
        })
      }
    },
    saveBasketballData(data) {
      this.basketballData = JSON.parse(JSON.stringify(data))
    },
    // 保存当前选择的内参比赛id
    setGMID(id) {
      this.gMID = id
    },
    // 修改优化金额
    changeBetAmount(price) {
      this.betAmount = price
    },
  }
})
